/**
 * 金融数据平台前端JavaScript
 */

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 初始化Bootstrap提示工具
    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // 设置表格的排序和搜索功能
    setupTableFilters();
    
    // 自动关闭警告消息
    setupAlertAutoClose();
    
    // 注册API数据刷新方法
    setupApiDataRefresh();
});

/**
 * 设置表格的排序和搜索功能
 */
function setupTableFilters() {
    // 获取所有带有data-table-filter属性的输入框
    var filterInputs = document.querySelectorAll('[data-table-filter]');
    
    filterInputs.forEach(function(input) {
        input.addEventListener('keyup', function() {
            var tableId = this.getAttribute('data-table-filter');
            var table = document.getElementById(tableId);
            
            if (!table) return;
            
            var value = this.value.toLowerCase();
            var rows = table.querySelectorAll('tbody tr');
            
            rows.forEach(function(row) {
                var text = row.textContent.toLowerCase();
                row.style.display = text.indexOf(value) > -1 ? '' : 'none';
            });
        });
    });
    
    // 获取所有带有data-table-sort属性的表头
    var sortHeaders = document.querySelectorAll('[data-table-sort]');
    
    sortHeaders.forEach(function(header) {
        header.addEventListener('click', function() {
            var tableId = this.getAttribute('data-table-sort');
            var columnIndex = Array.from(this.parentNode.children).indexOf(this);
            var table = document.getElementById(tableId);
            
            if (!table) return;
            
            sortTable(table, columnIndex);
        });
        
        // 添加排序指示器
        header.style.cursor = 'pointer';
        var sortIcon = document.createElement('i');
        sortIcon.className = 'fas fa-sort ms-1';
        header.appendChild(sortIcon);
    });
}

/**
 * 对表格按指定列排序
 */
function sortTable(table, columnIndex) {
    var switching = true;
    var rows, i, x, y, shouldSwitch, dir = "asc";
    var switchcount = 0;
    
    while (switching) {
        switching = false;
        rows = table.querySelectorAll('tbody tr');
        
        for (i = 0; i < (rows.length - 1); i++) {
            shouldSwitch = false;
            
            x = rows[i].getElementsByTagName("TD")[columnIndex];
            y = rows[i + 1].getElementsByTagName("TD")[columnIndex];
            
            // 检查是否需要交换行
            if (dir == "asc") {
                if (x.textContent.toLowerCase() > y.textContent.toLowerCase()) {
                    shouldSwitch = true;
                    break;
                }
            } else if (dir == "desc") {
                if (x.textContent.toLowerCase() < y.textContent.toLowerCase()) {
                    shouldSwitch = true;
                    break;
                }
            }
        }
        
        if (shouldSwitch) {
            rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
            switching = true;
            switchcount++;
        } else {
            if (switchcount == 0 && dir == "asc") {
                dir = "desc";
                switching = true;
            }
        }
    }
    
    // 更新排序图标
    var headers = table.querySelectorAll('th');
    headers.forEach(function(header, index) {
        var icon = header.querySelector('i.fas');
        if (icon) {
            if (index === columnIndex) {
                icon.className = dir === "asc" ? "fas fa-sort-up ms-1" : "fas fa-sort-down ms-1";
            } else {
                icon.className = "fas fa-sort ms-1";
            }
        }
    });
}

/**
 * 自动关闭警告消息
 */
function setupAlertAutoClose() {
    var alerts = document.querySelectorAll('.alert');
    
    alerts.forEach(function(alert) {
        if (!alert.classList.contains('alert-danger')) {
            setTimeout(function() {
                var alertInstance = bootstrap.Alert.getInstance(alert);
                if (alertInstance) {
                    alertInstance.close();
                } else {
                    alert.classList.add('fade');
                    setTimeout(function() {
                        alert.remove();
                    }, 150);
                }
            }, 5000);
        }
    });
}

/**
 * 注册API数据刷新方法
 */
function setupApiDataRefresh() {
    // 系统状态卡片API刷新
    refreshSystemStatus();
    
    // 注册定时刷新
    setInterval(refreshSystemStatus, 60000); // 每分钟刷新一次
}

/**
 * 刷新系统状态数据
 */
function refreshSystemStatus() {
    // 在实际应用中，应该通过API获取最新的系统状态数据
    // 这里只是示例，实际情况下应该发送Ajax请求获取真实数据
    
    // 模拟API请求
    // fetch('/api/system/status')
    //     .then(response => response.json())
    //     .then(data => {
    //         updateSystemStatusCards(data);
    //     })
    //     .catch(error => console.error('获取系统状态失败:', error));
    
    // 由于没有真正的API，这里使用随机数模拟数据更新
    console.log('刷新系统状态数据...');
    
    var statusElements = {
        totalSecurities: document.getElementById('totalSecurities'),
        totalQuotes: document.getElementById('totalQuotes'),
        totalTasks: document.getElementById('totalTasks'),
        runningTasks: document.getElementById('runningTasks')
    };
    
    // 只在仪表盘页面更新
    if (window.location.pathname.includes('dashboard')) {
        if (statusElements.totalSecurities) statusElements.totalSecurities.textContent = getRandomInt(4000, 5000).toLocaleString();
        if (statusElements.totalQuotes) statusElements.totalQuotes.textContent = (getRandomInt(16, 18) + '.' + getRandomInt(1, 9)) + 'M';
        if (statusElements.totalTasks) statusElements.totalTasks.textContent = getRandomInt(5200, 5400).toLocaleString();
        if (statusElements.runningTasks) statusElements.runningTasks.textContent = getRandomInt(5, 12).toString();
    }
}

/**
 * 生成指定范围内的随机整数
 */
function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

/**
 * 创建新任务
 */
function createNewTask(formData) {
    // 在实际应用中，应该通过API提交新任务
    console.log('提交新任务:', formData);
    
    // 模拟API请求
    // fetch('/api/tasks', {
    //     method: 'POST',
    //     headers: {
    //         'Content-Type': 'application/json',
    //     },
    //     body: JSON.stringify(formData),
    // })
    // .then(response => response.json())
    // .then(data => {
    //     showNotification('任务已成功提交', 'success');
    //     // 可能需要刷新任务列表
    // })
    // .catch(error => {
    //     console.error('提交任务失败:', error);
    //     showNotification('提交任务失败: ' + error.message, 'danger');
    // });
    
    // 由于没有真正的API，这里只是显示成功消息
    showNotification('任务已成功提交', 'success');
}

/**
 * 显示通知消息
 */
function showNotification(message, type = 'info') {
    var container = document.querySelector('.container');
    if (!container) return;
    
    var notification = document.createElement('div');
    notification.className = `alert alert-${type} alert-dismissible fade show`;
    notification.innerHTML = `
        ${message}
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    `;
    
    // 将通知添加到容器顶部
    container.insertBefore(notification, container.firstChild);
    
    // 自动关闭通知
    setTimeout(function() {
        notification.classList.remove('show');
        setTimeout(function() {
            notification.remove();
        }, 150);
    }, 5000);
}